From 777200325725bbf2467f4432b88855194cd74580 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Mon, 11 Jul 2016 19:27:39 +0300 Subject: [PATCH] Reduce duplication in `Context` creation --- src/cargo/ops/cargo_clean.rs | 18 +++++++----------- src/cargo/ops/cargo_rustc/context.rs | 19 ++++++++++++++----- src/cargo/ops/cargo_rustc/mod.rs | 12 +----------- 3 files changed, 22 insertions(+), 27 deletions(-) diff --git a/src/cargo/ops/cargo_clean.rs b/src/cargo/ops/cargo_clean.rs index 8306859ef..47aaaa00d 100644 --- a/src/cargo/ops/cargo_clean.rs +++ b/src/cargo/ops/cargo_clean.rs @@ -5,7 +5,7 @@ use std::path::Path; use core::{Profiles, Workspace}; use core::registry::PackageRegistry; use util::{CargoResult, human, ChainError, Config}; -use ops::{self, Layout, Context, BuildConfig, Kind, Unit}; +use ops::{self, Context, BuildConfig, Kind, Unit}; pub struct CleanOptions<'a> { pub spec: &'a [String], @@ -32,17 +32,13 @@ pub fn clean(ws: &Workspace, opts: &CleanOptions) -> CargoResult<()> { let resolve = try!(ops::resolve_ws(&mut registry, ws)); let packages = ops::get_resolved_packages(&resolve, registry); - let dest = if opts.release {"release"} else {"debug"}; - let host_layout = try!(Layout::new(ws, None, dest)); - let target_layout = match opts.target { - Some(target) => Some(try!(Layout::new(ws, Some(target), dest))), - None => None, - }; - let profiles = try!(ws.current()).manifest().profiles(); - let mut cx = try!(Context::new(&resolve, &packages, opts.config, - host_layout, target_layout, - BuildConfig::default(), + let mut cx = try!(Context::new(ws, &resolve, &packages, opts.config, + BuildConfig { + release: opts.release, + requested_target: opts.target.map(|s| s.to_owned()), + ..BuildConfig::default() + }, profiles)); let mut units = Vec::new(); diff --git a/src/cargo/ops/cargo_rustc/context.rs b/src/cargo/ops/cargo_rustc/context.rs index 964450e98..f73b9cada 100644 --- a/src/cargo/ops/cargo_rustc/context.rs +++ b/src/cargo/ops/cargo_rustc/context.rs @@ -6,7 +6,7 @@ use std::sync::Arc; use core::{Package, PackageId, PackageSet, Resolve, Target, Profile}; -use core::{TargetKind, Profiles, Metadata, Dependency}; +use core::{TargetKind, Profiles, Metadata, Dependency, Workspace}; use core::dependency::Kind as DepKind; use util::{self, CargoResult, ChainError, internal, Config, profile, Cfg, human}; @@ -55,13 +55,22 @@ struct TargetInfo { } impl<'a, 'cfg> Context<'a, 'cfg> { - pub fn new(resolve: &'a Resolve, + pub fn new(ws: &Workspace<'cfg>, + resolve: &'a Resolve, packages: &'a PackageSet<'cfg>, config: &'cfg Config, - host: Layout, - target_layout: Option, build_config: BuildConfig, profiles: &'a Profiles) -> CargoResult> { + + let dest = if build_config.release { "release" } else { "debug" }; + let host_layout = try!(Layout::new(ws, None, &dest)); + let target_layout = match build_config.requested_target.as_ref() { + Some(target) => { + Some(try!(Layout::new(ws, Some(&target), &dest))) + } + None => None, + }; + let target = build_config.requested_target.clone(); let target = target.as_ref().map(|s| &s[..]); let target_triple = target.unwrap_or_else(|| { @@ -72,7 +81,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> { }); Ok(Context { target_triple: target_triple, - host: host, + host: host_layout, target: target_layout, resolve: resolve, packages: packages, diff --git a/src/cargo/ops/cargo_rustc/mod.rs b/src/cargo/ops/cargo_rustc/mod.rs index 705b03fae..3401145f4 100644 --- a/src/cargo/ops/cargo_rustc/mod.rs +++ b/src/cargo/ops/cargo_rustc/mod.rs @@ -80,18 +80,8 @@ pub fn compile_targets<'a, 'cfg: 'a>(ws: &Workspace<'cfg>, }) }).collect::>(); - let dest = if build_config.release {"release"} else {"debug"}; let root = try!(packages.get(resolve.root())); - let host_layout = try!(Layout::new(ws, None, &dest)); - let target_layout = match build_config.requested_target.as_ref() { - Some(target) => { - Some(try!(layout::Layout::new(ws, Some(&target), &dest))) - } - None => None, - }; - - let mut cx = try!(Context::new(resolve, packages, config, - host_layout, target_layout, + let mut cx = try!(Context::new(ws, resolve, packages, config, build_config, profiles)); let mut queue = JobQueue::new(&cx); -- 2.30.2